<?php
/**
 * DolphinGTK - phpGtk framework
 *
 * @package    DolphinGTK
 * @author     Askarov Ruslan
 * @copyright  Askarov Ruslan (c) 2010.
 * @link       http://groups.google.com/group/dolphingtk
 * @license    http://www.opensource.org/licenses/gpl-license.php GPL
 * @version    0.1
 * @since      PHP v.: 5.2.1
 * @subpackage desktop
 * @category   library
 * @filesource
 */

final class Menu
{
  public function create( $menu = false )
  {
    // путь
    if( !defined('BASE_DIR') ) {
      $path = './';
    } else {
      $path = BASE_DIR;
    }

    //1
    if( is_array($menu) && count($menu) > 0 )
    {
      //2
      $GtkMenu   = new GtkMenu();
      $GtkAction = new GtkActionGroup('menu');

      foreach( $menu as $i => $items )
      {
        //3
        if( is_array($items) && count($items) >= 2 )
        {
          // если нужно передать дополнительные параметры
          if( count($items[1]) > 2 ) {
            $foo = array_slice($items[1],0,2);
            $arg = array_slice($items[1],2);
            $arg = "'".implode("', '", $arg) . "'";
          } else {
            $foo = $items[1];
          }


        $gmi[$i] = new GtkImageMenuItem($items[0]);

        if( $arg ) {
          eval('$gmi[$i]->connect_simple(\'activate\', $foo, '.$arg.');');
        } else {
          $gmi[$i]->connect_simple('activate', $items[1]);
        }

        // рисунок пункта меню
        if( !empty( $items[3] ) )
        {
          // возможное имя файла
          $imgs = $items[3];
          $file = $path . $imgs;

          // проверим наличие файла
          if( $imgs && file_exists( $file ) )
          {
            $gmi[$i]->set_image(
              GtkImage::new_from_file(
                $file
              )
            );
          }
          // если нет, то проверим стандартное
          elseif( $imgs && get_icon( $imgs ) )
          {
            $gmi[$i]->set_image(
              GtkImage::new_from_stock(
                get_icon( $imgs ),
                Gtk::ICON_SIZE_MENU
              )
            );
          }
        }


        // клавиши отработки
        if( !empty( $items[2] ) )
        {
          $keys = explode( '+', $items[2] );

          if( count( $keys ) == 2 )
          {
            $key = strtolower($keys[0]);
            $let = $keys[1];

            switch($key)
            {
              case 'ctrl':
                $key = Gdk::CONTROL_MASK;
                break;
              case 'alt':
                $key = Gdk::MOD1_MASK;
                break;
              case 'shift':
                $key = Gdk::SHIFT_MASK;
                break;
              case 'Super':
                $key = Gdk::SUPER_MASK;
                break;
              default:
                print "Error key!\n";
                exit;
                break;
            }
            
            eval("\$let=Gdk::KEY_$let;");

            $gmi[$i]->add_accelerator(
              'activate', Win::$accel_group,
              $let, $key, 1);
          }
          else
          {
            eval('$gmi[$i]->add_accelerator(
              \'activate\', Win::$accel_group,
              Gdk::KEY_'.$items[2].', 0, 1);');
          }
        }

        $GtkMenu->append($gmi[$i]);

        }
        else {
          $GtkMenu->append(new GtkSeparatorMenuItem);
        }
        //3
      }

      return $GtkMenu;
      //2
    }

    //1
  }


  public function enable() {}
  public function disable() {}

}
?>
